/* 
 * File:   Raiz.h
 * Author: jorgeorm
 *
 * Created on 25 de diciembre de 2011, 12:41 PM
 */

#include <cstdio>
#include <limits.h>

#ifndef RAIZ_H
#define	RAIZ_H

class Raiz {
public:
//    Constructores y destructores
//    
    Raiz( );
    Raiz(  long double cotaEBolzano );
    Raiz( const Raiz& orig );
    virtual ~Raiz();
    
//    Es abstracta, se establece que todo el que herede de raíz deberá implementarla
//    @param es el parametro que recibirá la función
//    
    virtual long double funcion(long double param) = 0;
    virtual long double derivadaFuncion(long double param)=0;
    virtual long double derivadaDosFuncion(long double param)=0;
    
//    Métodos para el calculo de raices de la función
//    
//    Se coloca como mecanismo de seguridad para contar las iteraciones desde una mejora al error aproximado
    long double biseccion(long double xinf, long double xsup);
    long double newtonRaphson( long double xInicial, int cotaIter);
    long double secante(long double  x1, long double x2, int cotaIter);
    long double muller(int maxIter, long double xInicial, long double hInicial);
    long double getCotaError();
    void setCotaError(long double error);
//    long double falsaPosicion();
    
protected :
//    Cota para el error en el calculo por bisección
//    TODO: Verificar si este error puede ser utilizado por los otros métodos o es solo para Bolzano ó bisección.
    long double cotaError;

};

#endif	/* RAIZ_H */

